<?php

class Cliente {
    private $id;
    private $nome;
    private $email;
    private $diaMesNasciemnto;
    private $telFixo;
    private $telMovel;
    private $descricao;
    private $inAtivo;
    private $idTipoPele;
    private $usuario;
    
    const NOME_MODULO = "Cliente";
    
    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }

    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getEmail() {
        return $this->email;
    }

    public function setEmail($email) {
        $this->email = $email;
    }

    public function getDiaMesNasciemnto() {
        return $this->diaMesNasciemnto;
    }

    public function setDiaMesNasciemnto($diaMesNasciemnto) {
        $this->diaMesNasciemnto = $diaMesNasciemnto;
    }

    public function getTelFixo() {
        return $this->telFixo;
    }

    public function setTelFixo($telFixo) {
        $this->telFixo = $telFixo;
    }

    public function getTelMovel() {
        return $this->telMovel;
    }

    public function setTelMovel($telMovel) {
        $this->telMovel = $telMovel;
    }

    public function getDescricao() {
        return $this->descricao;
    }

    public function setDescricao($descricao) {
        $this->descricao = $descricao;
    }

    public function getInAtivo() {
        return $this->inAtivo;
    }

    public function setInAtivo($inAtivo) {
        $this->inAtivo = $inAtivo;
    }
    public function getIdTipoPele() {
        return $this->idTipoPele;
    }

    public function setIdTipoPele($idTipoPele) {
        $this->idTipoPele = $idTipoPele;
    }

    public function getUsuario() {
        return $this->usuario;
    }

    public function setUsuario($usuario) {
        $this->usuario = $usuario;
    }

        
    /**
     * Retorna uma lista de clientes
     * @return Cliente[] clientes
     */
    public static function listar(){
        $clientes = array();
        $conn = Connection::getConnection();
                
        $rs = $conn->query("SELECT * FROM cliente");
        
        while($linha = $rs->fetch_assoc()){
            $clientes[] = self::arrayParaCliente($linha);
        }
        return $clientes;
    }
    /**
     * Retorna um cliente conforme o id passado
     * @param int id
     * @return Cliente
     */
    public static function consultar($id){
        $cliente = null;
        $conn = Connection::getConnection();
        
        $rs = $conn->query("SELECT * FROM cliente WHERE idCliente = $id");
        
        $linha = $rs->fetch_assoc();
        //se foi encontrado o registro
        if($linha){
           $cliente = self::arrayParaCliente($linha);
        }
        return $cliente;
    }
    
     /**
     * Retorna clientes com aquela string
     * @param string param
     * @return Cliente
     */
    public static function pesquisarClientePorNome($param){
        $clientes = array();
        $conn = Connection::getConnection();
        
        $rs = $conn->query("SELECT * FROM cliente WHERE nome LIKE '$param%'");
        
        //se foi encontrado o registro
        while($linha = $rs->fetch_assoc()){
            $clientes[] = self::arrayParaCliente($linha);
        }
        return $clientes;
    }

    public function alterar($idUsuario){
            $conn = Connection::getConnection();

            $rs = $conn->prepare("UPDATE cliente SET nome = ?, email = ?, descricao = ?, in_ativo = ?,
                                 idtp_pele = ?, diaMes_nasc = ?, tel_fixo = ?, tel_movel = ?, idUsuario = ?
                                 WHERE idCliente = ?");
            $rs->bind_param("ssssisiiii", $this->nome, $this->email, $this->descricao, $this->inAtivo,
                                  $this->idTipoPele, Util::dataViewParaBanco($this->diaMesNasciemnto), 
                                  $this->telFixo, $this->telMovel, $idUsuario, $this->id);
                          
            return $rs->execute();
    }
    public function inserir($idUsuario){
            $conn = Connection::getConnection();
            
            $dt = Util::dataViewParaBanco($this->diaMesNasciemnto);
		
            $rs = $conn->prepare("INSERT INTO cliente SET nome = ?, email = ?, descricao = ?, in_ativo = ?
                                 , idtp_pele = ?, diaMes_nasc = ?, tel_fixo = ?, tel_movel = ?, idUsuario = ?");
            
	          $rs->bind_param("ssssisiii", $this->nome, $this->email, $this->descricao, $this->inAtivo, 
                          $this->idTipoPele, $dt, $this->telFixo, $this->telMovel, $idUsuario);
              
            return $rs->execute();       
    }
    public function excluir($id){
            $conn = Connection::getConnection();

            $rs = $conn->prepare("DELETE FROM cliente  WHERE idCliente= ?");
            $rs->bind_param("d", $id);
            
            return $rs->execute();

    }
    public static function obtemIdPorEmailCliente($email){
        $conn = Connection::getConnection();
        
        $rs = $conn->query("SELECT * FROM cliente WHERE email = '$email'");
        
        $linha = $rs->fetch_assoc();
        
        return $linha;
    }
    
     /**
     * Retorna uma lista de clientes apartir do nome
     * @return Cliente[] clientes
     */
    public static function listaClientePorNome($nome){
        $clientes = array();
        $conn = Connection::getConnection();
                
        $rs = $conn->query("SELECT * FROM cliente WHERE nome LIKE '$nome%' ORDER BY nome ASC");
        
        while($linha = $rs->fetch_assoc()){
            $clientes[] = self::arrayParaCliente($linha);
        }
        return $clientes;
    }

    /**
     * Retorna uma lista de clientes apartir do email
     * @return Cliente[] clientes
     */
    public static function listaClientePorEmail($email, $pesquisaExata = false){
        $clientes = array();
        $conn = Connection::getConnection();
        if($pesquisaExata == true){        
            $rs = $conn->query("SELECT * FROM cliente WHERE email = '$email' ORDER BY nome ASC");
        } else {
            $rs = $conn->query("SELECT * FROM cliente WHERE email LIKE '$email%' ORDER BY nome ASC");
        }
        while($linha = $rs->fetch_assoc()){
            $clientes[] = self::arrayParaCliente($linha);
        }
        return $clientes;
    }
    
    /**
     * Tranforma a linha de uma consulta na tabela usuario em um objeto usuario
     * @param type $linha linha de uma consulta a tabela usuario
     */
    public static function arrayParaCliente($linha){
        $cliente = new Cliente();
        $cliente->id = isset($linha["idCliente"]) ? $linha["idCliente"] : null;
        $cliente->nome = isset($linha["nome"]) ? $linha["nome"] : null;
        $cliente->email = isset($linha["email"]) ? $linha["email"] : null;
        $cliente->diaMesNasciemnto = isset($linha["diaMes_nasc"]) ? $linha["diaMes_nasc"] : null;
        $cliente->telFixo = isset($linha["tel_fixo"]) ? $linha["tel_fixo"] : null;
        $cliente->telMovel = isset($linha["tel_movel"]) ? $linha["tel_movel"] : null;
        $cliente->descricao = isset($linha["descricao"]) ? $linha["descricao"] : null;
        $cliente->inAtivo = isset($linha["in_ativo"]) ? $linha["in_ativo"] : null;
        $cliente->idTipoPele = isset($linha["idtp_pele"]) ? $linha["idtp_pele"] : null;
        $cliente->usuario = isset($linha["idUsuario"]) ? $linha["idUsuario"] : null;
        
       
        return $cliente;
    }
    


}

?>
